gusucode.com > VC++ 社区视频监控系统源代码-源码程序 > VC++ 社区视频监控系统源代码-源码程序/code/源程序/CaptureDlg.cpp
//Download by http://www.NewXing.com // CaptureDlg.cpp : implementation file // #include "stdafx.h" #include "Capture.h" #include "CaptureDlg.h" #include "ControlForm.h" #include "Autodlg.h" #include "Playdlg.h" #include "Login.h" #include "Managedlg.h" #include "PreView.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CAboutDlg dialog used for App About class CAboutDlg : public CDialog { public: CAboutDlg(); // Dialog Data //{{AFX_DATA(CAboutDlg) enum { IDD = IDD_ABOUTBOX }; //}}AFX_DATA // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CAboutDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: //{{AFX_MSG(CAboutDlg) //}}AFX_MSG DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) { //{{AFX_DATA_INIT(CAboutDlg) //}}AFX_DATA_INIT } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CAboutDlg) //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) //{{AFX_MSG_MAP(CAboutDlg) // No message handlers //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CCaptureDlg dialog CCaptureDlg::CCaptureDlg(CWnd* pParent /*=NULL*/) : CDialog(CCaptureDlg::IDD, pParent) { //{{AFX_DATA_INIT(CCaptureDlg) //}}AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDI_ICON1); m_CapitonColor = RGB(0,0,255); m_Caption = "社区视频监控系统"; m_IsMax = TRUE; m_Time = FALSE; m_Kinescope = FALSE; m_Cancel = FALSE; } void CCaptureDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CCaptureDlg) DDX_Control(pDX, IDC_REBRUSH, m_ReBrush); DDX_Control(pDX, IDC_INBRUSH, m_InBrush); DDX_Control(pDX, IDC_INAPERTURE, m_InAperture); DDX_Control(pDX, IDC_REAPERTURE, m_ReAperture); DDX_Control(pDX, IDC_RELEN, m_ReLen); DDX_Control(pDX, IDC_INLEN, m_InLen); DDX_Control(pDX, IDC_REFOCI, m_ReFoci); DDX_Control(pDX, IDC_INFOCI, m_InFoci); DDX_Control(pDX, IDC_BUTTONRIGHT, m_ButtonRight); DDX_Control(pDX, IDC_BUTTONLEFT, m_ButtonLeft); DDX_Control(pDX, IDC_BUTTONUP, m_ButtonUp); DDX_Control(pDX, IDC_BUTTONDOWN, m_ButtonDown); DDX_Control(pDX, IDC_MSCOMM1, m_Com); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CCaptureDlg, CDialog) //{{AFX_MSG_MAP(CCaptureDlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_WM_TIMER() ON_WM_SIZE() ON_BN_CLICKED(IDC_SNAPSHOT, OnSnapshot) ON_WM_WINDOWPOSCHANGED() ON_BN_CLICKED(IDC_BMP, OnBmp) ON_BN_CLICKED(IDC_JPG, OnJpg) ON_BN_CLICKED(IDC_VGA, OnVga) ON_BN_CLICKED(IDC_PCI, OnPci) ON_BN_CLICKED(IDC_SETTING, OnSetting) ON_WM_CTLCOLOR() ON_WM_NCMOUSEMOVE() ON_WM_MOUSEMOVE() ON_WM_NCLBUTTONDOWN() ON_WM_NCACTIVATE() ON_BN_CLICKED(IDC_CONTROL, OnControl) ON_BN_CLICKED(IDC_AUTOMATISM, OnAutomatism) ON_BN_CLICKED(IDC_STOP, OnStop) ON_BN_CLICKED(IDC_KINESCOPE, OnKinescope) ON_BN_CLICKED(IDC_PLAY, OnPlay) ON_BN_CLICKED(IDC_MANAGE, OnManage) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CCaptureDlg message handlers BOOL CCaptureDlg::OnInitDialog() { CDialog::OnInitDialog(); CButton* pBmpButton = (CButton*) GetDlgItem(IDC_BMP); pBmpButton->SetCheck(1); ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } SetIcon(m_hIcon, TRUE); SetIcon(m_hIcon, FALSE); CLogin dlg; if(dlg.DoModal() != IDOK) { m_Cancel = TRUE; CDialog::OnCancel(); } char buf[256]; ::GetCurrentDirectory(256,buf); m_PathText.Format("%s",buf); m_UserName = dlg.m_Name; m_LogTime = CTime::GetCurrentTime(); CString strText; strText.Format("%s\t%s\t登录\r\n",m_UserName,m_LogTime.Format("%y-%m-%d %H:%M:%S")); strcat(buf,"\\log.txt"); m_LogPath.Format("%s",buf); CFile file; file.Open(m_LogPath,CFile::modeWrite); file.SeekToEnd(); file.Write(strText,strText.GetLength()); file.Close(); //加载背景位图 m_BKGround.LoadBitmap(IDB_BKGROUND); m_BorderHeight = GetSystemMetrics(SM_CYBORDER); m_BorderWidth = GetSystemMetrics(SM_CXBORDER); m_CaptionHeight = GetSystemMetrics(SM_CYCAPTION); SetWindowText(m_Caption); m_CaptionFont.CreateFont(14,10,0,3,600,0,0,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,FF_ROMAN,"宋体"); CBitmap bitmap; bitmap.LoadBitmap(IDB_MINBT); BITMAPINFO bInfo; bitmap.GetObject(sizeof(bInfo),&bInfo); m_ButtonWidth = bInfo.bmiHeader.biWidth; m_ButtonHeight = bInfo.bmiHeader.biHeight; bitmap.DeleteObject(); CString strTemp; m_Frame.Create(IDD_PANEL_DIALOG,NULL); CRect rc; GetWindowRect(rc); m_Frame.SetWindowPos(&wndTop,0,0,rc.Width()-180,rc.Height()-10,SWP_SHOWWINDOW); m_Frame.ShowWindow(SW_SHOW); CButton* pVGAButton = (CButton*) GetDlgItem(IDC_VGA); CButton* pPCIButton = (CButton*) GetDlgItem(IDC_PCI); CString str= "temp"; GetPrivateProfileString("显卡设置","类型","VGA" ,str.GetBuffer(0), 10, "./syssetting.ini"); BOOL ret; if(str=="VGA") { pVGAButton->SetCheck(1); pPCIButton->SetCheck(0); //初始化SDK ret = VCAInitSdk(m_Frame.m_hWnd,PCI_VIEDOMEMORY); } else { ret = VCAInitSdk(m_Frame.m_hWnd,PCI_MEMORY_VIDEOMEMORY); pVGAButton->SetCheck(0); pPCIButton->SetCheck(1); } if(ret) { //获得几路视频 m_DevNum = VCAGetDevNum(); m_Frame.CreatePreWnd((int)sqrt(m_DevNum)); for (int i = 0; i<m_DevNum; i++) { VCAOpenDevice(i,m_Frame.m_pList[i].m_hWnd); BOOL ret = VCAStartVideoPreview(i); m_Frame.UpdateAllPreView(); } m_BStop = FALSE; } else { m_DevNum = 4; m_Frame.CreatePreWnd((int)sqrt(m_DevNum)); for (int i = 0; i<4; i++) { m_Frame.m_pList[i].m_ShowImage = FALSE; m_Frame.m_pList[i].m_Stop = psPreview; } } SetTimer(1,1000,NULL); m_ButtonUp.m_Type = ctUp; m_ButtonDown.m_Type = ctDown; m_ButtonLeft.m_Type = ctLeft; m_ButtonRight.m_Type = ctRight; m_InFoci.m_Type = ctInFoci; m_ReFoci.m_Type = ctReFoci; m_InLen.m_Type = ctInLen; m_ReLen.m_Type = ctReLen; m_InAperture.m_Type = ctInAperture; m_ReAperture.m_Type = ctReAperture; m_InBrush.m_Type = ctInBrush; m_ReBrush.m_Type = ctReBrush; m_Len = GetPrivateProfileInt("使用字节数","字节数",8,"./stage.ini"); m_ActoinCount = GetPrivateProfileInt("控制项","控制数",13,"./stage.ini"); m_pData = new unsigned char[m_ActoinCount][MAXNUM]; m_Port = GetPrivateProfileInt("端口设置","端口号",1,"./stage.ini"); GetPrivateProfileString("端口设置","环境设置","9600,n,8,1", m_Setting.GetBuffer(0),MAX_PATH,"./stage.ini"); int data; char buff[20] = {0}; char var[20] = {0}; for (int i = 0 ; i<m_ActoinCount ; i++) { for (int j = 0 ; j <m_Len; j++) { char section[20] = "字节"; itoa(i+1,var,10); itoa(j+1,buff,10); strcat(section,buff); data = GetPrivateProfileInt(var,section,0,"./stage.ini"); m_pData[i][j] = data; } } //设置端口信息,并打开端口 m_Com.SetSettings(m_Setting); m_Com.SetOutBufferSize(512); m_Com.SetCommPort(m_Port); m_Com.SetSThreshold(0); m_Com.SetPortOpen(TRUE); return TRUE; } void CCaptureDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialog::OnSysCommand(nID, lParam); } } // If you add a minimize button to your dialog, you will need the code below // to draw the icon. For MFC applications using the document/view model, // this is automatically done for you by the framework. void CCaptureDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangle int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon dc.DrawIcon(x, y, m_hIcon); } else { CDialog::OnPaint(); } DrawDialog(FALL); m_IsDrawForm = TRUE; } // The system calls this to obtain the cursor to display while the user drags // the minimized window. HCURSOR CCaptureDlg::OnQueryDragIcon() { return (HCURSOR) m_hIcon; } void CCaptureDlg::OnCancel() { for(int i=0;i<m_DevNum;i++) VCACloseDevice(i); VCAUnInitSdk(); CDialog::OnCancel(); } void CCaptureDlg::OnTimer(UINT nIDEvent) { //判断某一路是否有信号 eFieldFrequency frequency; for (int i=0;i<m_DevNum;i++) { VCAGetVidFieldFrq(i,frequency); if(frequency == FIELD_FREQ_0HZ) //无信号 { if (m_Frame.m_pList[i].m_ShowImage == TRUE) { m_Frame.m_pList[i].m_ShowImage = FALSE; m_Frame.m_pList[i].Invalidate(); } } else { if(m_Frame.m_pList[i].m_ShowImage == FALSE) { m_Frame.m_pList[i].m_ShowImage = TRUE; m_Frame.m_pList[i].Invalidate(); if(m_Frame.m_pList[i].m_Stop == psPreview) { VCAUpdateOverlayWnd(m_Frame.m_hWnd); VCAUpdateVideoPreview(i,m_Frame.m_pList[i].m_hWnd); } } } } if(m_Time) { CTime time= CTime::GetCurrentTime(); if(time == m_StopTime) { OnStop(); m_Time = FALSE; } } CDialog::OnTimer(nIDEvent); } void CCaptureDlg::OnSize(UINT nType, int cx, int cy) { CDialog::OnSize(nType, cx, cy); CPoint pos(30,1); m_MinRect.CopyRect(CRect(m_RTitleRc.left+pos.x,(m_TitleDrawHeight +2*m_BorderHeight -m_ButtonHeight)/2+pos.y,m_ButtonWidth,m_ButtonHeight)); pos.x = 55; m_MaxRect.CopyRect(CRect(m_RTitleRc.left+pos.x,(m_TitleDrawHeight +2*m_BorderHeight -m_ButtonHeight)/2+pos.y,m_ButtonWidth,m_ButtonHeight)); pos.x = 80; m_CloseRect.CopyRect(CRect(m_RTitleRc.left+pos.x,(m_TitleDrawHeight +2*m_BorderHeight -m_ButtonHeight)/2+pos.y,m_ButtonWidth,m_ButtonHeight)); Invalidate(); CRect rc,frc; GetClientRect(rc); CRect rcconctrl; GetDlgItem(IDC_STATIC1)->GetClientRect(rcconctrl); GetDlgItem(IDC_STATIC1)->MoveWindow(rc.Width()-170,rc.top+55, rcconctrl.Width(),rcconctrl.Height()); GetDlgItem(IDC_STATIC2)->GetClientRect(rcconctrl); GetDlgItem(IDC_STATIC2)->MoveWindow(rc.Width()-170,rc.top+255, rcconctrl.Width(),rcconctrl.Height()); GetDlgItem(IDC_REFOCI)->GetClientRect(rcconctrl); GetDlgItem(IDC_REFOCI)->MoveWindow(rc.Width()-150,rc.top+80, rcconctrl.Width(),rcconctrl.Height()); GetDlgItem(IDC_RELEN)->GetClientRect(rcconctrl); GetDlgItem(IDC_RELEN)->MoveWindow(rc.Width()-150,rc.top+120, rcconctrl.Width(),rcconctrl.Height()); GetDlgItem(IDC_REAPERTURE)->GetClientRect(rcconctrl); GetDlgItem(IDC_REAPERTURE)->MoveWindow(rc.Width()-150,rc.top+160, rcconctrl.Width(),rcconctrl.Height()); GetDlgItem(IDC_REBRUSH)->GetClientRect(rcconctrl); GetDlgItem(IDC_REBRUSH)->MoveWindow(rc.Width()-150,rc.top+200, rcconctrl.Width(),rcconctrl.Height()); GetDlgItem(IDC_INFOCI)->GetClientRect(rcconctrl); GetDlgItem(IDC_INFOCI)->MoveWindow(rc.Width()-80,rc.top+80, rcconctrl.Width(),rcconctrl.Height()); GetDlgItem(IDC_INLEN)->GetClientRect(rcconctrl); GetDlgItem(IDC_INLEN)->MoveWindow(rc.Width()-80,rc.top+120, rcconctrl.Width(),rcconctrl.Height()); GetDlgItem(IDC_INAPERTURE)->GetClientRect(rcconctrl); GetDlgItem(IDC_INAPERTURE)->MoveWindow(rc.Width()-80,rc.top+160, rcconctrl.Width(),rcconctrl.Height()); GetDlgItem(IDC_INBRUSH)->GetClientRect(rcconctrl); GetDlgItem(IDC_INBRUSH)->MoveWindow(rc.Width()-80,rc.top+200, rcconctrl.Width(),rcconctrl.Height()); GetDlgItem(IDC_BUTTONUP)->GetClientRect(rcconctrl); GetDlgItem(IDC_BUTTONUP)->MoveWindow(rc.Width()-110,rc.top+270, rcconctrl.Width(),rcconctrl.Height()); GetDlgItem(IDC_MSCOMM1)->GetClientRect(rcconctrl); GetDlgItem(IDC_MSCOMM1)->MoveWindow(rc.Width()-110,rc.top+320, rcconctrl.Width(),rcconctrl.Height()); GetDlgItem(IDC_BUTTONDOWN)->GetClientRect(rcconctrl); GetDlgItem(IDC_BUTTONDOWN)->MoveWindow(rc.Width()-110,rc.top+370, rcconctrl.Width(),rcconctrl.Height()); GetDlgItem(IDC_BUTTONLEFT)->GetClientRect(rcconctrl); GetDlgItem(IDC_BUTTONLEFT)->MoveWindow(rc.Width()-160,rc.top+320, rcconctrl.Width(),rcconctrl.Height()); GetDlgItem(IDC_BUTTONRIGHT)->GetClientRect(rcconctrl); GetDlgItem(IDC_BUTTONRIGHT)->MoveWindow(rc.Width()-60,rc.top+320, rcconctrl.Width(),rcconctrl.Height()); GetDlgItem(IDC_CONTROL)->GetClientRect(rcconctrl); GetDlgItem(IDC_CONTROL)->MoveWindow(rc.Width()-170,rc.top+435, rcconctrl.Width(),rcconctrl.Height()); GetDlgItem(IDC_KINESCOPE)->GetClientRect(rcconctrl); GetDlgItem(IDC_KINESCOPE)->MoveWindow(rc.Width()-170,rc.top+470, rcconctrl.Width(),rcconctrl.Height()); GetDlgItem(IDC_SNAPSHOT)->GetClientRect(rcconctrl); GetDlgItem(IDC_SNAPSHOT)->MoveWindow(rc.Width()-170,rc.top+505, rcconctrl.Width(),rcconctrl.Height()); GetDlgItem(IDC_AUTOMATISM)->GetClientRect(rcconctrl); GetDlgItem(IDC_AUTOMATISM)->MoveWindow(rc.Width()-170,rc.top+575, rcconctrl.Width(),rcconctrl.Height()); GetDlgItem(IDC_MANAGE)->GetClientRect(rcconctrl); GetDlgItem(IDC_MANAGE)->MoveWindow(rc.Width()-85,rc.top+435, rcconctrl.Width(),rcconctrl.Height()); GetDlgItem(IDC_PLAY)->GetClientRect(rcconctrl); GetDlgItem(IDC_PLAY)->MoveWindow(rc.Width()-85,rc.top+470, rcconctrl.Width(),rcconctrl.Height()); GetDlgItem(IDC_SETTING)->GetClientRect(rcconctrl); GetDlgItem(IDC_SETTING)->MoveWindow(rc.Width()-85,rc.top+505, rcconctrl.Width(),rcconctrl.Height()); GetDlgItem(IDC_STOP)->GetClientRect(rcconctrl); GetDlgItem(IDC_STOP)->MoveWindow(rc.Width()-85,rc.top+575, rcconctrl.Width(),rcconctrl.Height()); GetDlgItem(IDC_BMP)->GetClientRect(rcconctrl); GetDlgItem(IDC_BMP)->MoveWindow(rc.Width()-172,rc.top+540, rcconctrl.Width(),rcconctrl.Height()); GetDlgItem(IDC_JPG)->GetClientRect(rcconctrl); GetDlgItem(IDC_JPG)->MoveWindow(rc.Width()-133,rc.top+540, rcconctrl.Width(),rcconctrl.Height()); GetDlgItem(IDC_VGA)->GetClientRect(rcconctrl); GetDlgItem(IDC_VGA)->MoveWindow(rc.Width()-87,rc.top+540, rcconctrl.Width(),rcconctrl.Height()); GetDlgItem(IDC_PCI)->GetClientRect(rcconctrl); GetDlgItem(IDC_PCI)->MoveWindow(rc.Width()-48,rc.top+540, rcconctrl.Width(),rcconctrl.Height()); m_Frame.SetWindowPos(&wndTop,0,0,rc.Width()-180,rc.Height()-10,SWP_SHOWWINDOW); m_Frame.GetClientRect(frc); m_Frame.SetWindowPos(NULL,0,7,frc.Width(),rc.Height()-8,0); m_Frame.ShowWindow(SW_SHOW); } void CCaptureDlg::OnOK() { } void CCaptureDlg::OnSnapshot() { if(CPreView::m_CurIndex != -1) { if(m_Frame.m_pList[CPreView::m_CurIndex].m_ShowImage) { CButton* pBmpButton = (CButton*)GetDlgItem(IDC_BMP); if(pBmpButton->GetCheck() != 0) { CFileDialog fDlg(FALSE,"bmp","bmp_001",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"bmp|*.bmp",this); if(fDlg.DoModal() == IDOK) { CString fName = fDlg.GetPathName(); VCASaveAsBmpFile(CPreView::m_CurIndex,fName); } } else { CFileDialog fDlg(FALSE,"jpg","jpg_001",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"JPG|*.JPG",this); if(fDlg.DoModal() == IDOK) { CString fName = fDlg.GetPathName(); VCASaveAsJpegFile(CPreView::m_CurIndex,fName); } } m_LogTime = CTime::GetCurrentTime(); CString strText; strText.Format("%s\t%s\t快照\r\n",m_UserName, m_LogTime.Format("%y-%m-%d %H:%M:%S")); CFile file; file.Open(m_LogPath,CFile::modeWrite); file.SeekToEnd(); file.Write(strText,strText.GetLength()); file.Close(); } else { MessageBox("当前选择的图像不能预览!","提示"); } } } void CCaptureDlg::OnWindowPosChanged(WINDOWPOS FAR* lpwndpos) { CDialog::OnWindowPosChanged(lpwndpos); if(!m_Cancel) { for (UINT i = 0 ; i< m_DevNum; i++) { if (m_Frame.m_pList[i].m_ShowImage) { if (m_Frame.m_pList[i].m_Stop==psStop) { VCAStopVideoPreview(i); VCAUpdateOverlayWnd(m_Frame.GetSafeHwnd()); } else if (m_Frame.m_pList[i].m_Stop==psPreview) { m_Frame.m_pList[i].Invalidate(); VCAUpdateOverlayWnd(m_Frame.m_hWnd); VCAUpdateVideoPreview(i,m_Frame.m_pList[i].m_hWnd); } } } } } void CCaptureDlg::OnBmp() { CButton* pBmpButton = (CButton*)GetDlgItem(IDC_BMP); pBmpButton->SetCheck(1); CButton* pJpgButton = (CButton*)GetDlgItem(IDC_JPG); pJpgButton->SetCheck(0); } void CCaptureDlg::OnJpg() { CButton* pJpgButton = (CButton*)GetDlgItem(IDC_JPG); pJpgButton->SetCheck(1); CButton* pBmpButton = (CButton*)GetDlgItem(IDC_BMP); pBmpButton->SetCheck(0); } void CCaptureDlg::OnVga() { CButton* pVGAButton = (CButton*)GetDlgItem(IDC_VGA); pVGAButton->SetCheck(1); CButton* pPCIButton = (CButton*)GetDlgItem(IDC_PCI); pPCIButton->SetCheck(0); } void CCaptureDlg::OnPci() { CButton* pVGAButton = (CButton*)GetDlgItem(IDC_VGA); pVGAButton->SetCheck(0); CButton* pPCIButton = (CButton*)GetDlgItem(IDC_PCI); pPCIButton->SetCheck(1); } void CCaptureDlg::OnSetting() { CButton* pVGAButton = (CButton*)GetDlgItem(IDC_VGA); int sel = pVGAButton->GetCheck(); if(sel) { WritePrivateProfileString("显卡设置","类型","VGA","./syssetting.ini"); } else { WritePrivateProfileString("显卡设置","类型","PCI","./syssetting.ini"); } m_LogTime = CTime::GetCurrentTime(); CString strText; strText.Format("%s\t%s\t设置显卡类型\r\n",m_UserName, m_LogTime.Format("%y-%m-%d %H:%M:%S")); CFile file; file.Open(m_LogPath,CFile::modeWrite); file.SeekToEnd(); file.Write(strText,strText.GetLength()); file.Close(); MessageBox("要使显卡设置生效,需要重新启动应用程序!","提示"); } HBRUSH CCaptureDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr; if(nCtlColor == CTLCOLOR_DLG) { //定义一个位图画刷 CBrush m_Brush(&m_BKGround); CRect rect; GetClientRect(rect); //选中画刷 pDC->SelectObject(&m_Brush); //填充客户区域 pDC->FillRect(rect,&m_Brush); return m_Brush; } else hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); return hbr; } void CCaptureDlg::DrawDialog(UINT Flags) { m_FrameHeight = GetSystemMetrics(SM_CYFIXEDFRAME); m_BorderHeight = GetSystemMetrics(SM_CYBORDER); m_FrameWidth = GetSystemMetrics(SM_CXFIXEDFRAME); m_BorderWidth = GetSystemMetrics(SM_CXBORDER); m_CaptionHeight = GetSystemMetrics(SM_CYCAPTION); CRect Clientrect; GetClientRect(Clientrect); CRect WinRC,FactRC; GetWindowRect(WinRC); FactRC.CopyRect(CRect(0,0,WinRC.Width(),WinRC.Height())); //获取窗口设备上下文 CWindowDC WindowDC(this); CBitmap LeftLine,*OldObj; BITMAPINFO bitinfo; CDC memDC; memDC.CreateCompatibleDC(&WindowDC); int leftwidth = 0; //左标题的宽度 int rightwidth = 0; //右标题的宽度 int leftlinewidth = 0; //窗体边框和3D宽度 int rLineWidth; int bLineHeight; DeleteObject(LeftLine); LeftLine.LoadBitmap(IDB_RIGHTTITLE); //加载右标题 LeftLine.GetObject(sizeof(bitinfo),&bitinfo); rightwidth = bitinfo.bmiHeader.biWidth; LeftLine.Detach(); int x,y; //绘制左边线 //获取位图大小 if(Flags & FLEFTBAR) { DeleteObject(LeftLine); LeftLine.LoadBitmap(IDB_LEFTBAR); LeftLine.GetObject(sizeof(bitinfo),&bitinfo); LeftLine.GetObject(sizeof(bitinfo),&bitinfo); x = bitinfo.bmiHeader.biWidth; y = bitinfo.bmiHeader.biHeight; OldObj = memDC.SelectObject(&LeftLine); //判断位图的宽度与窗体边缘的宽度 leftlinewidth = (x> m_FrameWidth+m_BorderWidth)? x:m_FrameWidth+m_BorderWidth; WindowDC.StretchBlt(0,m_CaptionHeight,leftlinewidth, FactRC.Height()-m_CaptionHeight,&memDC,0,0,x,y,SRCCOPY); memDC.SelectObject(OldObj); LeftLine.Detach(); } //绘制左标题 if(Flags & FLEFTTITLE) { DeleteObject(LeftLine); LeftLine.LoadBitmap(IDB_LEFTTITLE); //获取位图大小 LeftLine.GetObject(sizeof(bitinfo),&bitinfo); OldObj = memDC.SelectObject(&LeftLine); leftwidth = x = bitinfo.bmiHeader.biWidth; y = bitinfo.bmiHeader.biHeight; m_TitleDrawHeight = (m_CaptionHeight+4 > y) ? m_CaptionHeight+4 : y; m_LTitleRc.CopyRect(CRect(0,0,x,m_TitleDrawHeight)); WindowDC.StretchBlt(m_LTitleRc.left,m_LTitleRc.top,m_LTitleRc.Width(), m_LTitleRc.Height(),&memDC,0,0,x,y,SRCCOPY); memDC.SelectObject(OldObj); LeftLine.Detach(); } //绘制右标题 if(Flags & FRIGHTTITLE) { DeleteObject(LeftLine); LeftLine.LoadBitmap(IDB_RIGHTTITLE); //获取位图大小 LeftLine.GetObject(sizeof(bitinfo),&bitinfo); OldObj = memDC.SelectObject(&LeftLine); x = bitinfo.bmiHeader.biWidth; y = bitinfo.bmiHeader.biHeight; m_TitleDrawHeight = (m_CaptionHeight+4 > y) ? m_CaptionHeight+4 : y; m_RTitleRc.CopyRect(CRect(FactRC.right-x,0,FactRC.right,m_TitleDrawHeight)); WindowDC.StretchBlt(m_RTitleRc.left,m_RTitleRc.top,m_RTitleRc.Width(), m_RTitleRc.Height(),&memDC,0,0,x,y,SRCCOPY); DeleteObject( memDC.SelectObject(OldObj)); LeftLine.Detach(); } //绘制中间标题 if(Flags & FMIDTITLE) { DeleteObject(LeftLine); LeftLine.LoadBitmap(IDB_MIDTITLE); //获取位图大小 LeftLine.GetObject(sizeof(bitinfo),&bitinfo); OldObj = memDC.SelectObject(&LeftLine); x = bitinfo.bmiHeader.biWidth; y = bitinfo.bmiHeader.biHeight; m_TitleDrawHeight = (m_CaptionHeight+4 > y) ? m_CaptionHeight+4 : y; m_MTitleRc.CopyRect(CRect(m_LTitleRc.right,0,m_RTitleRc.left,m_TitleDrawHeight)); WindowDC.StretchBlt(m_MTitleRc.left,m_MTitleRc.top,m_MTitleRc.Width(), m_MTitleRc.Height(),&memDC,0,0,x,y,SRCCOPY); LeftLine.Detach(); memDC.SelectObject(OldObj); } //绘制右边框 if(Flags & FRIGHTBAR) { DeleteObject(LeftLine); LeftLine.LoadBitmap(IDB_RIGHTBAR); //获取位图大小 LeftLine.GetObject(sizeof(bitinfo),&bitinfo); OldObj = memDC.SelectObject(&LeftLine); x = bitinfo.bmiHeader.biWidth; y = bitinfo.bmiHeader.biHeight; rLineWidth = m_FrameWidth + m_BorderWidth; rLineWidth = rLineWidth>x? rLineWidth:x; WindowDC.StretchBlt(m_RTitleRc.right-rLineWidth,m_TitleDrawHeight,rLineWidth, FactRC.Height()-m_TitleDrawHeight,&memDC,0,0,x,y,SRCCOPY); memDC.SelectObject(OldObj); LeftLine.Detach(); } //绘制底边框 if(Flags & FBOTTOMBAR) { DeleteObject(LeftLine); LeftLine.LoadBitmap(IDB_BOTTOMBAR); //获取位图大小 LeftLine.GetObject(sizeof(bitinfo),&bitinfo); OldObj = memDC.SelectObject(&LeftLine); x = bitinfo.bmiHeader.biWidth; y = bitinfo.bmiHeader.biHeight; bLineHeight = m_BorderHeight + m_FrameHeight; bLineHeight = bLineHeight>y? bLineHeight:y; WindowDC.StretchBlt(leftlinewidth,FactRC.Height()-bLineHeight,m_RTitleRc.right -rLineWidth-leftlinewidth, bLineHeight,&memDC,0,0,x,y,SRCCOPY); memDC.SelectObject(OldObj); LeftLine.Detach(); } //绘制底边框 CPoint pos(30,1); m_MinRect.CopyRect(CRect(m_RTitleRc.left+pos.x,(m_TitleDrawHeight+2*m_BorderHeight -m_ButtonHeight)/2+pos.y,m_ButtonWidth,m_ButtonHeight)); pos.x = 55; m_MaxRect.CopyRect(CRect(m_RTitleRc.left+pos.x,(m_TitleDrawHeight+2*m_BorderHeight -m_ButtonHeight)/2+pos.y,m_ButtonWidth,m_ButtonHeight)); pos.x = 80; m_CloseRect.CopyRect(CRect(m_RTitleRc.left+pos.x,(m_TitleDrawHeight+2*m_BorderHeight -m_ButtonHeight)/2+pos.y,m_ButtonWidth,m_ButtonHeight)); //绘制最小化按钮 if(Flags & FMINBUTTON) { DeleteObject(LeftLine); LeftLine.LoadBitmap(IDB_MINBT); //获取位图大小 LeftLine.GetObject(sizeof(bitinfo),&bitinfo); OldObj = memDC.SelectObject(&LeftLine); x = bitinfo.bmiHeader.biWidth; y = bitinfo.bmiHeader.biHeight; WindowDC.StretchBlt(m_MinRect.left,m_MinRect.top,m_MinRect.right, m_MinRect.bottom,&memDC,0,0,x,y,SRCCOPY); memDC.SelectObject(OldObj); LeftLine.Detach(); } //绘制最大化按钮 if ( Flags & FMAXBUTTON) { DeleteObject(LeftLine); LeftLine.LoadBitmap(IDB_MAXBT); //获取位图大小 LeftLine.GetObject(sizeof(bitinfo),&bitinfo); OldObj = memDC.SelectObject(&LeftLine); x = bitinfo.bmiHeader.biWidth; y = bitinfo.bmiHeader.biHeight; WindowDC.StretchBlt(m_MaxRect.left,m_MaxRect.top,m_MaxRect.right, m_MaxRect.bottom,&memDC,0,0,x,y,SRCCOPY); memDC.SelectObject(OldObj); LeftLine.Detach(); } //绘制关闭按钮 if(Flags & FCLOSEBUTTON) { DeleteObject(LeftLine); LeftLine.LoadBitmap(IDB_CLOSEBT); //获取位图大小 LeftLine.GetObject(sizeof(bitinfo),&bitinfo); OldObj = memDC.SelectObject(&LeftLine); x = bitinfo.bmiHeader.biWidth; y = bitinfo.bmiHeader.biHeight; WindowDC.StretchBlt(m_CloseRect.left,m_CloseRect.top,m_CloseRect.right, m_CloseRect.bottom,&memDC,0,0,x,y,SRCCOPY); memDC.SelectObject(OldObj); LeftLine.Detach(); } LeftLine.DeleteObject(); memDC.DeleteDC(); DrawCaption(); } void CCaptureDlg::DrawCaption() { if(!m_Caption.IsEmpty()) { CDC* pDC = GetWindowDC(); pDC->SetBkMode(TRANSPARENT); pDC->SetTextColor(m_CapitonColor); pDC->SetTextAlign(TA_CENTER); CRect rect; GetClientRect(rect); pDC->SelectObject(&m_CaptionFont); pDC->TextOut(rect.Width()/2, m_CaptionHeight/3 ,m_Caption); ReleaseDC(pDC); } } void CCaptureDlg::OnNcMouseMove(UINT nHitTest, CPoint point) { // TODO: Add your message handler code here and/or call default CRect tempMin,tempMax,tempClose,ClientRect; CWindowDC WindowDC (this); CDC memDC; memDC.CreateCompatibleDC(&WindowDC); BITMAPINFO bInfo; CBitmap LeftLine; int x,y; GetWindowRect(ClientRect); tempMin.CopyRect(CRect(m_MinRect.left+ ClientRect.left,ClientRect.top +m_MinRect.top,m_MinRect.right+m_MinRect.left+ ClientRect.left, m_MinRect.bottom+m_MinRect.top+ClientRect.top)); tempMax.CopyRect(CRect(m_MaxRect.left+ ClientRect.left,ClientRect.top +m_MaxRect.top,m_MaxRect.right+m_MaxRect.left+ ClientRect.left, m_MaxRect.bottom+m_MaxRect.top+ClientRect.top)); tempClose.CopyRect(CRect(m_CloseRect.left+ ClientRect.left,ClientRect.top +m_CloseRect.top,m_CloseRect.right+m_CloseRect.left+ ClientRect.left, m_CloseRect.bottom+m_CloseRect.top+ClientRect.top)); if(tempMin.PtInRect(point)) //鼠标在最小化按钮上移动时,更改按钮显示的位图 { if(m_ButtonState != bsMin) { LeftLine.LoadBitmap(IDB_MINHOTBT); LeftLine.GetObject(sizeof(bInfo),&bInfo); x = bInfo.bmiHeader.biWidth; y = bInfo.bmiHeader.biHeight; memDC.SelectObject(&LeftLine); WindowDC.StretchBlt(m_MinRect.left,m_MinRect.top,m_MinRect.right, m_MinRect.bottom,&memDC,0,0,x,y,SRCCOPY); m_IsDrawForm = FALSE; m_ButtonState = bsMin; LeftLine.Detach(); } } else if(tempMax.PtInRect(point)) { if(m_ButtonState!=bsMax && m_ButtonState!=bsRes) { LeftLine.LoadBitmap(IDB_MAXHOTBT); LeftLine.GetObject(sizeof(bInfo),&bInfo); x = bInfo.bmiHeader.biWidth; y = bInfo.bmiHeader.biHeight; memDC.SelectObject(&LeftLine); WindowDC.StretchBlt(m_MaxRect.left,m_MaxRect.top,m_MaxRect.right, m_MaxRect.bottom,&memDC,0,0,x,y,SRCCOPY); m_IsDrawForm = FALSE; if (m_IsMax) { m_ButtonState = bsMax; } else { m_ButtonState = bsRes; } LeftLine.Detach(); } } else if(tempClose.PtInRect(point)) { if(m_ButtonState != bsClose) { LeftLine.LoadBitmap(IDB_CLOSEHOTBT); LeftLine.GetObject(sizeof(bInfo),&bInfo); x = bInfo.bmiHeader.biWidth; y = bInfo.bmiHeader.biHeight; memDC.SelectObject(&LeftLine); WindowDC.StretchBlt(m_CloseRect.left,m_CloseRect.top,m_CloseRect.right, m_CloseRect.bottom,&memDC,0,0,x,y,SRCCOPY); m_IsDrawForm = FALSE; m_ButtonState = bsClose; LeftLine.Detach(); } } else { if(m_IsDrawForm == FALSE) { if(m_ButtonState == bsMin) DrawDialog( FMINBUTTON); else if(m_ButtonState == bsClose) DrawDialog( FCLOSEBUTTON); else if(m_ButtonState == bsMax || m_ButtonState==bsRes) DrawDialog( FMAXBUTTON); } m_ButtonState = bsNone; } LeftLine.DeleteObject(); ReleaseDC(&memDC); CDialog::OnNcMouseMove(nHitTest, point); } void CCaptureDlg::OnMouseMove(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default if(m_ButtonState != bsNone) { if(m_ButtonState == bsMin) DrawDialog(FMINBUTTON); else if(m_ButtonState == bsClose) DrawDialog(FCLOSEBUTTON); else if(m_ButtonState==bsMax || m_ButtonState==bsRes) DrawDialog(FMAXBUTTON); m_ButtonState = bsNone; } CDialog::OnMouseMove(nFlags, point); } void CCaptureDlg::OnNcLButtonDown(UINT nHitTest, CPoint point) { // TODO: Add your message handler code here and/or call default switch(m_ButtonState) { case bsClose: //关闭窗口 { OnCancel(); } break; case bsMin: { ShowWindow(SW_SHOWMINIMIZED); } break; case bsMax: { m_ButtonState = bsMax; ShowWindow(SW_SHOWMAXIMIZED); m_IsMax = FALSE; } break; case bsRes: { ShowWindow(SW_RESTORE); m_IsMax = TRUE; } break; } CDialog::OnNcLButtonDown(nHitTest, point); } BOOL CCaptureDlg::OnNcActivate(BOOL bActive) { // TODO: Add your message handler code here and/or call default OnPaint() ; return CDialog::OnNcActivate(bActive); } void CCaptureDlg::MoveCapture(UINT num) { VARIANT vt; SAFEARRAY* pSafe; SAFEARRAYBOUND band; band.cElements = m_Len; band.lLbound = 0; pSafe = SafeArrayCreate(VT_UI1,1,&band); for(long i=0;i<m_Len;i++) { SafeArrayPutElement(pSafe,&i,(void*)&m_pData[num][i]); } vt.vt = VT_ARRAY |VT_UI1; vt.parray = pSafe; m_Com.SetOutput((COleVariant)vt); } //向上移动 void CCaptureDlg::OnUp() { MoveCapture(0); } //停止移动 void CCaptureDlg::OnReset() { MoveCapture(12); } //向下移动 void CCaptureDlg::OnDown() { MoveCapture(1); } //向左移动 void CCaptureDlg::OnLeft() { MoveCapture(2); } //向右移动 void CCaptureDlg::OnRight() { MoveCapture(3); } //增加聚焦 void CCaptureDlg::OnInFoci() { MoveCapture(5); } //减小聚焦 void CCaptureDlg::OnReFoci() { MoveCapture(4); } //对焦增 void CCaptureDlg::OnInLen() { MoveCapture(7); } //对焦减 void CCaptureDlg::OnReLen() { MoveCapture(6); } //光圈减 void CCaptureDlg::OnReAperture() { MoveCapture(8); } //光圈增 void CCaptureDlg::OnInAperture() { MoveCapture(9); } //雨刷减 void CCaptureDlg::OnReBrush() { MoveCapture(10); } //雨刷增 void CCaptureDlg::OnInBrush() { MoveCapture(11); } void CCaptureDlg::OnControl() { // TODO: Add your control notification handler code here CControlForm dlg; dlg.m_UserName = m_UserName; dlg.m_LogPath = m_LogPath; dlg.DoModal(); Invalidate(); } DWORD WINAPI ThreadProc(LPVOID lpParameter ) { CCaptureDlg* pDlg = (CCaptureDlg*)lpParameter; while (true) { switch(pDlg->m_Num) { case 0: //向上 pDlg->MoveCapture(0); Sleep(2000); //向左 pDlg->MoveCapture(2); Sleep(22000); //向下 pDlg->MoveCapture(1); Sleep(2000); //向右 pDlg->MoveCapture(3); Sleep(22000); //向下 pDlg->MoveCapture(1); Sleep(2000); //向左 pDlg->MoveCapture(2); Sleep(22000); //向上 pDlg->MoveCapture(0); Sleep(2000); //向右 pDlg->MoveCapture(3); Sleep(22000); break; case 1: //向左 pDlg->MoveCapture(2); Sleep(22000); //向右 pDlg->MoveCapture(3); Sleep(22000); break; case 2: //向上 pDlg->MoveCapture(0); Sleep(2000); //向下 pDlg->MoveCapture(1); Sleep(2000); break; } } return 0; } void CCaptureDlg::OnAutomatism() { // TODO: Add your control notification handler code here CAutodlg dlg; dlg.m_UserName = m_UserName; dlg.m_LogPath = m_LogPath; if(dlg.DoModal()==IDOK) { DWORD threadID; m_hThread = ::CreateThread(NULL,0,ThreadProc,(LPVOID)this,0,&threadID); m_Num = dlg.m_Num; m_Time = dlg.m_Time; if(m_Time) { m_StopTime = dlg.stoptime; } } Invalidate(); } void CCaptureDlg::OnStop() { // TODO: Add your control notification handler code here //停止运动 MoveCapture(12); ::TerminateThread(m_hThread,0); //停止监控 VCAStopVideoCapture(0); } void CCaptureDlg::OnKinescope() { // TODO: Add your control notification handler code here if(!m_Kinescope) { if(CPreView::m_CurIndex != -1) { CFileDialog fDlg(FALSE,"avi","avi_001",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"AVI|*.avi",this); if (fDlg.DoModal()==IDOK) { m_Kinescope = TRUE; CString file = fDlg.GetPathName(); VCASetKeyFrmInterval(CPreView::m_CurIndex,250); VCASetBitRate(CPreView::m_CurIndex,256); VCASetVidCapFrameRate(CPreView::m_CurIndex,25); VCASetVidCapSize(CPreView::m_CurIndex,320,240); VCASetXVIDQuality(CPreView::m_CurIndex,10,3); VCASetXVIDCompressMode(CPreView::m_CurIndex,XVID_VBR_MODE); BOOL ret = VCAStartVideoCapture(CPreView::m_CurIndex,CAP_ORIGIN_MPEG4_STREAM, MPEG4_AVIFILE_CALLBACK ,file); GetDlgItem(IDC_KINESCOPE)->SetWindowText("停止录像"); } } m_LogTime = CTime::GetCurrentTime(); CString strText; strText.Format("%s\t%s\t录像\r\n",m_UserName, m_LogTime.Format("%y-%m-%d %H:%M:%S")); CFile file; file.Open(m_LogPath,CFile::modeWrite); file.SeekToEnd(); file.Write(strText,strText.GetLength()); file.Close(); } else { m_Kinescope = FALSE; GetDlgItem(IDC_KINESCOPE)->SetWindowText("录像"); VCAStopVideoCapture(CPreView::m_CurIndex); } } void CCaptureDlg::OnPlay() { // TODO: Add your control notification handler code here CPlaydlg dlg; dlg.m_UserName = m_UserName; dlg.m_LogPath = m_LogPath; dlg.DoModal(); Invalidate(); } void CCaptureDlg::OnManage() { // TODO: Add your control notification handler code here CManagedlg dlg; dlg.m_UserName = m_UserName; dlg.m_LogPath = m_LogPath; dlg.m_PathText = m_PathText; dlg.DoModal(); Invalidate(); }